Mrli
别装作很努力,
因为结局不会陪你演戏。
Contacts:
QQ博客园

Python Web——Django笔记(一)

2019/09/15 Python 后端 Django
Word count: 1,487 | Reading time: 7min

Python Web——Django笔记

新建项目: django-admin startproject blog .
创建应用程序(APP):python manage.py startapp fsite
添加app:INSTALLED_APPS=['...']

新建的 app 如果不加到 INSTALL_APPS 中的话, django 就不能自动找到app中的模板文件(app-name/templates/下的文件)和静态文件(app-name/static/中的文件) .小提示,DEBUG=True 的时候,Django 还可以自动找到 各 app 下 static 文件夹中的静态文件(js,css,图片等资源)

创建SQLite数据库:python manage.py migrate #创建数据表
使模型生效:python manage.py makemigrations
# Django 在 blog 应用的 migrations\ 目录下生成了一个 0001_initial.py 文件,这个文件是 Django 用来记录我们对模型做了哪些修改的文件
创建管理员:python manage.py createsuperuser
添加template: 'DIRS':[os.path.join(BASE_DIR,'templates')],
清空数据库:python manage.py flush
BASE_DIRsettings.py 在配置开头前面定义的变量
添加静态文件:
1
2
3
STATIC_URL = '/static/'
STATICFILES_DIRS = [os.path.join(BASE_DIR,'static')]
STATIC_ROOT = "/home/nymrli/mvote/staticfiles/"

urls.py头文件

1
2
3
4
> from django.contrib import admin
> from django.conf.urls import include,url
> from fsite.views import homepage,showpost
>

views.py头文件

1
2
3
4
5
> from django.shortcuts import render,redirect
> from django.http import HttpResponse,request
> from .models import Post
> from django.template.loader import get_template
>

使显示标题:
1
2
def __str__(self):
return self.title

书上的__unicode__和__repr__都没有用


增加显示其他时

1
2
class PostAdmin(admin.ModelAdmin):
list_display = ('title','slug','pub_date')

要记得在admin.site.register(Post,PostAdmin)中增加PostAdmin


在urls.py中的url()的库文件要修改

1
2
from django.contrib import admin
from django.conf.urls import include,url

同时记得这点:

1
2
3
4
urlpatterns = [
url('^admin/', admin.site.urls), ## '^admin/'在/后面不能加$
url(r'^$',homepage),
]

views.py视图函数:

1
2
def homepage(request):				##首先记得是*def*
posts = Post.objects.all() ##虽然pycharm没提示Post有objects但仍有效果

count,post in enumerate(posts):
1
2
3
4
for count,post in enumerate(posts):
post_lists.append("NO.{}".format(str(count)) + str(post) + "<hr>")
post_lists.append("<small>" + str(post.body.encode('utf-8')) + "</small><br>")
### 这边的encode没必要加

template

步骤1: 在settings.py 中设置模板文件夹的位置.

步骤2:在urls.py中创建网址和views.py中函数的对应关系

步骤3:创建.html文件(例如index.html)做好排版数据要放的位置

步骤4:运行程序,以objects.all()在views.py中取得数据或资料

步骤5:以render函数把数据(posts)送到指定的模板文件(例如index.html)中.


网页对应urls.py

步骤1: 在urls.py中设置,只要是/post/开头的网址,就把后面接着的文字当做参数传送slug给post_detail显示单篇文章的函数

步骤2:在views.py中新增一个post_detail函数.除了接受request参数外,也接受slug参数.

步骤3:在templates文件夹中创建一个用来显示单篇文章的post.html

步骤4:在post_detail函数中,以slug为关键字搜索数据集,找出是否有符合的项目

步骤5:如果有符合的,就把找到的数据项传送给render函数,找出post.html模板页进行渲染(即进行页面显示),再把结果交给HttpResponse回传给浏览器

步骤6:如果没有符合的项目,就把网页转回首页


共享模板的使用:

文件名 用途说明
base.html 网站的基础模板,提供网站的主要设计、外观风格
header.html 网站中每一个网页共享的标题元素,通常是放置网站 Log 的地方
footer.html 网站中每一个网页的共享页尾,用来放置版权声明或其他参考信息
index.html 此范例网站的首页
post.html 此范例网站用来显示单篇文章的网页

显示图片

要用过滤器,不然就是串html代码.


Wampserver初始:

1
2
账号:root
密码:空

bootstrap的CDN:

HTML.CSS放在之前,JS的放在之前

1
2
3
4
5
6
7
8
9
10
11
12
13
<head>
<!-- Latest compiled and minified CSS -->
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity=
"sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">

<!-- Optional theme -->
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap-theme.min.css"
integrity="sha384-rHyoN1iRsVXV4nD0JutlnGaslCJuC7uwjduW9SVrLvRYooPp2bWYgmgJQIXwl/Sp" crossorigin="anonymous">

<!-- Latest compiled and minified JavaScript -->
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"
integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script>
</head>
1
2
3
4
5
<body>    
<script src="https://code.jquery.com/jquery-3.1.0.min.js"
integrity="sha256-cCueBR6CsyA4/9szpPfrX3s49M9vUU5BgtiJj06wt/s="
crossorigin="anonymous"></script>
</body>

后台管理的自定义admin.py

显示更多的小标题
1
2
3
4
5
class ProductAdmin(admin.ModelAdmin):
list_display = ('pmodel','nickname','price','year')
search_fields = ('nickname',)
ordering = ('price',)
admin.site.register(Product,ProductAdmin)
要显示中文的小标题
1
2
3
4
5
6
7
8
class Product(models.Model):
pmodel = models.ForeignKey(PModel,on_delete=models.CASCADE,verbose_name='型号')
nickname = models.CharField(max_length=15,default='超值二手机',verbose_name='摘要')
description = models.TextField(default='暂无说明')
year = models.PositiveIntegerField(default=2018,verbose_name='出厂年份')
price = models.PositiveIntegerField(default=0,verbose_name='价格')
def __str__(self): //python3.*中都用__str__,不用__unicode__
return self.nickname

注意:admin.py 中的class ProductAdmin 仍需要


1
2
3
4
5
try:
product = models.Product.objects.get(id=id)
images = models.PPhoto.objects.filter(product=product)
except:
pass
django中的ORM中如果用get找不到,就会产生一个DoseNotExist的异常中断程序

filter作用:我们很少会一次性从数据库中取出所有的数据;通常都只针对一部分数据进行操作

所以要将product中的成员单独


***python 中没有null ***

与C不同的是,在python中是没有NULL的,取而代之的是None,它的含义是为空

python是把0,空字符串‘ ’和None都看作False,把其他数值和非空字符串都看作True

表示该值是一个空对象,空值是Python里一个特殊的值,用None表示。None不能理解为0,因为0是有意义的,而None是一个特殊的空值。


1
2
3
4
5
6
<label for="byear">你的年份:</label>
<select name='byear'>
{% for year in years %}
<option value="{{ year }}">{{ year }}</option>
{% endfor %}
</select><br>

这个也要放到


对数据的提取:
1
2
3
4
5
try:
urid = request.GET['user_id']
urpass = request.GET['user_pass']
urfcolor = request.GET.getlist('fcolor') #注意区别()与[]
uryear = request.GET['byear']

Author: Mrli

Link: https://nymrli.top/2018/10/24/Python Web——Django笔记(一)/

Copyright: All articles in this blog are licensed under CC BY-NC-SA 3.0 unless stating additionally.

< PreviousPost
复制Django项目时需要注意、修改的地方
NextPost >
Python Web——Django笔记(二)
CATALOG
  1. 1. Python Web——Django笔记
    1. 1.0.0.1. 新建项目: django-admin startproject blog .
    2. 1.0.0.2. 创建应用程序(APP):python manage.py startapp fsite
    3. 1.0.0.3. 添加app:INSTALLED_APPS=['...']
    4. 1.0.0.4. 创建SQLite数据库:python manage.py migrate #创建数据表
    5. 1.0.0.5. 使模型生效:python manage.py makemigrations
    6. 1.0.0.6. # Django 在 blog 应用的 migrations\ 目录下生成了一个 0001_initial.py 文件,这个文件是 Django 用来记录我们对模型做了哪些修改的文件
    7. 1.0.0.7. 创建管理员:python manage.py createsuperuser
    8. 1.0.0.8. 添加template: 'DIRS':[os.path.join(BASE_DIR,'templates')],
    9. 1.0.0.9. 清空数据库:python manage.py flush
    10. 1.0.0.10. BASE_DIR 是 settings.py 在配置开头前面定义的变量
    11. 1.0.0.11. 添加静态文件:
  2. 1.0.1. urls.py头文件
  3. 1.0.2. views.py头文件
    1. 1.0.2.1. 使显示标题:
  4. 1.0.3. template
  5. 1.0.4. 网页对应urls.py
  6. 1.0.5. 共享模板的使用:
  7. 1.0.6. 后台管理的自定义admin.py
    1. 1.0.6.0.1. 显示更多的小标题
    2. 1.0.6.0.2. 要显示中文的小标题
  • 1.0.7. 注意:admin.py 中的class ProductAdmin 仍需要
    1. 1.0.7.0.1. django中的ORM中如果用get找不到,就会产生一个DoseNotExist的异常中断程序
  • 1.0.7.1. 对数据的提取: